package Day011_多线程1.demo05_原子类;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author zhangyan
 * @date 2020/4/28 14:36
 */

/*
    原子类:
           AtomicInteger类:
                            构造方法:
                                    AtomicInteger() 创建初始值为0的新AtomicInteger对象
                                    AtomicInteger(int initialValue) 创建具有给定初始值的AtomicInteger对象

                            成员方法:
                                    int addAndGet( 5 ) 以原子方式将给定值与当前值相加
                              数组的 arr.addAndGet(index,int) 指定索引元素增加int

                                    int get()  获取当前值
                                    int getAndIncrement()  自增1
                                    int getAndDecrement()  自减1

 */

public class demo02_AtomicInteger {
    public static void main(String[] args) throws InterruptedException {
/*
        案例:
            子线程对a变量自增100000
            主线程也对a变量自增100000
        */

        //创建子线程
        MyThread mt = new MyThread();
        mt.start();

        //主线程也对a变量自增100000
        for (int i = 0; i < 100000; i++) {
            MyThread.a.getAndIncrement();
        }

        //保证子线程 主线程都执行完毕,才打印a的值,设定睡眠3秒
        Thread.sleep(3000);
        System.out.println("最终a:" + MyThread.a); //最终a:200000
    }
}

class MyThread extends Thread {
    //static int a = 0;
    static AtomicInteger a = new AtomicInteger();

    @Override
    public void run() {
        //子线程对a变量自增100000
        for (int i = 0; i < 100000; i++) {
            a.getAndIncrement(); //a表示的int值自增1
        }
        System.out.println("子线程执行完毕");
    }
}